﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using Tipler.DataSetler;
using Tipler.Enumlar;
using Tipler.Siniflar;
using System.Data;
using System.Text;
using IKYSWeb.Siniflar;
using System.Collections;
using System.Drawing;
using Tipler.OzellikTipleri;
using IsKurallari.Yetki;

namespace IKYSWeb.Yetki
{
    [YetkiAttribute(EnumSayfaYetkileri.Herkes_Yetkili)]
    public partial class Yetki_TasraKullanici : BasePage
    {
        #region Session Özellikleri

        private KullaniciDataSet KullaniciListesi
        {
            get { return (KullaniciDataSet)Session["YETKI_Kullanici_LISTE"]; }
            set { Session["YETKI_Kullanici_LISTE"] = value; }
        }

        private KullaniciDataSet KullaniciAramaList
        {
            get { return (KullaniciDataSet)Session["Kullanici_LISTE"]; }
            set { Session["Kullanici_LISTE"] = value; }
        }

        private int SecilenKullaniciID
        {
            get { return (int)ViewState["YETKI_Kullanici_SONKAYITID"]; }
            set { ViewState["YETKI_Kullanici_SONKAYITID"] = value; }
        }

        #endregion

        #region Sayfa Açılış

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                txtTckimlikNo.MaxLength = (new KullaniciDataSet.KullaniciDataTable()).TCKimlikNoColumn.MaxLength;
                txtAdi.MaxLength = (new KullaniciDataSet.KullaniciDataTable()).AdiColumn.MaxLength;
                txtSoyadi.MaxLength = (new KullaniciDataSet.KullaniciDataTable()).SoyadiColumn.MaxLength;
                txtKullaniciAdi.MaxLength = (new KullaniciDataSet.KullaniciDataTable()).KullaniciAdiColumn.MaxLength;
                txtAciklama.MaxLength = (new KullaniciDataSet.KullaniciDataTable()).AciklamaColumn.MaxLength;

                KullaniciListesi = null;
                SecilenKullaniciID = -1;

                mv.SetActiveView(vListe);
            }
        }

        #endregion

        #region Butonlar

        protected void btnAra_Click(object sender, EventArgs e)
        {
            YetkiIsKurali oYetki = new YetkiIsKurali();
            FonksiyonSonuc<KullaniciDataSet> fsKullanici = oYetki.KullaniciSorgula(txtAdiAra.Text, txtSoyadiAra.Text,
                                                                                   txtKullaniciAdiAra.Text,
                                                                                   -1,
                                                                                   -1,
                                                                                   -1,
                                                                                   -1,
                                                                                   AktifKullanici.KullaniciID);
            if (fsKullanici.HataVarMi)
                throw new Exception(fsKullanici.Hata);
            else
            {
                KullaniciAramaList = fsKullanici.Sonuc;

                grdListe.DataSource = KullaniciAramaList;
                grdListe.DataBind();
            }

            grdListe.DataSource = KullaniciAramaList;
            grdListe.DataBind();
        }
        protected void btnYeniKayit_Click(object sender, EventArgs e)
        {
            //TODO : Yetki Açılacak.
            //if (!YetkiAraci.YetkiliMi(EnumYetkiler.KullaniciYeniKayit, Response)) return;

            SecilenKullaniciID = -1;

            FormTemizle();

            mv.SetActiveView(vKayit);
        }
        protected void btnKaydet_Click(object sender, EventArgs e)
        {
            //TODO : Yetki Açılacak.
            //if (!YetkiAraci.YetkiliMi(EnumYetkiler.KullaniciKaydet, Response)) return;

            YetkiIsKurali oYetki = new YetkiIsKurali();
            KullaniciGrupDataSet dsKullaniciGrup = new KullaniciGrupDataSet();
            KullaniciDataSet.KullaniciRow drKullanici;

            #region Kontroller

            if (KullaniciListesi == null)
            {
                KullaniciListesi = new KullaniciDataSet();
            }

            if (SecilenKullaniciID == -1 && KullaniciListesi.Kullanici.Select("KullaniciAdi='" + txtKullaniciAdi.Text + "'").Length > 0)
            {
                MesajGoster(Page, "Bu kişi sistemde mevcuttur!!!!", MesajTipiEnum.Hata);
                return;
            }

            FonksiyonSonuc<KullaniciDataSet> oSonucKontrol = oYetki.KullaniciSorgula("", "", txtKullaniciAdi.Text.Trim(), EnumAktifPasif.Aktif.GetHashCode(), -1, -1, -1, -1);
            if (oSonucKontrol.HataVarMi)
            {
                throw new Exception(oSonucKontrol.Hata);
            }

            #endregion

            if (SecilenKullaniciID == -1)
            {
                if (oSonucKontrol.Sonuc.Kullanici.Rows.Count > 0)
                {
                    MesajGoster(Page, "Aynı Kullanıcı Adı Sistemde Mevcuttur.Farklı Kullanıcı Adı Giriniz", MesajTipiEnum.Uyari);
                    return;
                }

                drKullanici = KullaniciListesi.Kullanici.NewKullaniciRow();
                drKullanici.Sifre = MD5Sifreleme(txtSifre.Text);

                #region Kullanıcı Grubu Kaydediliyor.

                KullaniciGrupDataSet.KullaniciGrupRow drKullaniciGrup;
                drKullaniciGrup = dsKullaniciGrup.KullaniciGrup.NewKullaniciGrupRow();
                drKullaniciGrup.KullaniciID = SecilenKullaniciID;
                drKullaniciGrup.GrupID = EnumGrup.mühendis.GetHashCode();

                dsKullaniciGrup.KullaniciGrup.AddKullaniciGrupRow(drKullaniciGrup);

                #endregion
            }
            else
            {
                if (oSonucKontrol.Sonuc.Kullanici.Rows.Count > 0
                        && oSonucKontrol.Sonuc.Kullanici[0].KullaniciID != SecilenKullaniciID)
                {
                    MesajGoster(Page, "Aynı Kullanıcı Adı Sistemde Mevcuttur.Farklı Kullanıcı Adı Giriniz", MesajTipiEnum.Uyari);
                    return;
                }

                drKullanici = KullaniciListesi.Kullanici.FindByKullaniciID(SecilenKullaniciID);
                if (txtSifre.Text != "")
                    drKullanici.Sifre = MD5Sifreleme(txtSifre.Text);
            }

            drKullanici.KullaniciTurID = Convert.ToByte(EnumKullaniciTur.Mühendis);
            drKullanici.TCKimlikNo = txtTckimlikNo.Text.Trim();
            drKullanici.Adi = txtAdi.Text.Trim();
            drKullanici.Soyadi = txtSoyadi.Text.Trim();
            drKullanici.KullaniciAdi = txtKullaniciAdi.Text.Trim();
            drKullanici.Aciklama = txtAciklama.Text.Trim();
            drKullanici.SonGecerlilikTarihi = AktifKullanici.KullaniciBilgisiRow.SonGecerlilikTarihi;
            drKullanici.BuroNo = AktifKullanici.KullaniciBilgisiRow.BuroNo;
            drKullanici.BelgeNo = AktifKullanici.KullaniciBilgisiRow.BelgeNo;
            drKullanici.SicilNo = AktifKullanici.KullaniciBilgisiRow.SicilNo;
            drKullanici.LisansSahibiKullaniciID = AktifKullanici.KullaniciID;
            drKullanici.Durum = Convert.ToByte(EnumAktifPasif.Aktif);

            #region Yetkili Bölge

            FonksiyonSonuc<KullaniciYetkiliBolgeDataSet> oSonucYetkiliBolge = oYetki.KullaniciYetkiliBolgeGetirbyKullaniciID(drKullanici.KullaniciID);
            if (oSonucYetkiliBolge.HataVarMi)
            {
                MesajGoster(Page, oSonucYetkiliBolge.Hata, MesajTipiEnum.Hata);
                return;
            }

            KullaniciYetkiliBolgeDataSet dsYetkiliBolge = oSonucYetkiliBolge.Sonuc;
            foreach (KullaniciYetkiliBolgeDataSet.KullaniciYetkiliBolgeRow dr in dsYetkiliBolge.KullaniciYetkiliBolge.Rows)
            {
                dr.Delete();
            }

            KullaniciYetkiliBolgeDataSet.KullaniciYetkiliBolgeRow drYetkiliBolge = null;
            foreach (KullaniciYetkiliBolgeDataSet.KullaniciYetkiliBolgeRow drLisansSahibiBolge in AktifKullanici.KullaniciYetkiliBolgeleri.KullaniciYetkiliBolge.Rows)
            {
                drYetkiliBolge = dsYetkiliBolge.KullaniciYetkiliBolge.NewKullaniciYetkiliBolgeRow();
                drYetkiliBolge.KullaniciID = drKullanici.KullaniciID;
                drYetkiliBolge.IlID = drLisansSahibiBolge.IlID;
                drYetkiliBolge.IlceID = drLisansSahibiBolge.IlceID;
                dsYetkiliBolge.KullaniciYetkiliBolge.AddKullaniciYetkiliBolgeRow(drYetkiliBolge);
            }

            #endregion

            if (SecilenKullaniciID == -1)
            {
                KullaniciListesi.Kullanici.AddKullaniciRow(drKullanici);
            }

            if (KullaniciListesi.HasChanges())
            {
                FonksiyonSonuc<KullaniciDataSet> oSonuc = oYetki.KullaniciKaydet((KullaniciDataSet)KullaniciListesi.GetChanges(),
                                                                                 (KullaniciGrupDataSet)dsKullaniciGrup.GetChanges(),
                                                                                 (KullaniciYetkiliBolgeDataSet)dsYetkiliBolge.GetChanges());

                if (oSonuc.HataVarMi)
                {
                    KullaniciListesi.RejectChanges();

                    MesajGoster(Page, oSonuc.Hata, MesajTipiEnum.Hata);
                    return;
                }

                KullaniciListesi.AcceptChanges();
                SecilenKullaniciID = Convert.ToInt32(oSonuc.Sonuc.Kullanici.Rows[oSonuc.Sonuc.Kullanici.Count - 1]["KullaniciID"].ToString());
            }

            CachePage.KullaniciDoldur();
            FormTemizle();
            btnAra_Click(null, null);
            mv.SetActiveView(vListe);
            MesajGoster(Page, "Kullanici bilgisi başarı ile kaydedilmiştir.", MesajTipiEnum.Basari);
        }
        protected void btnGeri_Click(object sender, EventArgs e)
        {
            mv.SetActiveView(vListe);
        }

        #endregion

        #region Event ve Fonksiyonlar

        protected void grdListe_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            grdListe.DataSource = KullaniciAramaList;
            grdListe.PageIndex = e.NewPageIndex;
            grdListe.DataBind();
        }
        protected void grdListe_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName != "Page")
            {
                int rowIndex = Convert.ToInt32(e.CommandArgument);
                int id = Convert.ToInt32(grdListe.DataKeys[rowIndex].Value.ToString());

                if (e.CommandName == "Guncelle")
                {
                    //if (!YetkiAraci.YetkiliMi(EnumYetkiler.KullaniciGüncelle, Response)) return;

                    FormHazirla(id);
                    mv.SetActiveView(vKayit);
                }
                if (e.CommandName == "Sil")
                {
                    //if (!YetkiAraci.YetkiliMi(EnumYetkiler.KullaniciSil, Response)) return;

                    YetkiIsKurali oYetki = new YetkiIsKurali();
                    FonksiyonSonuc<Boolean> oSonuc = oYetki.KullaniciSil(id);
                    if (oSonuc.HataVarMi)
                    {
                        MesajGoster(Page, oSonuc.Hata, MesajTipiEnum.Hata);
                        return;
                    }

                    btnAra_Click(null, null);
                }
            }
        }

        private void FormHazirla(int KullaniciID)
        {
            SecilenKullaniciID = KullaniciID;

            YetkiIsKurali oYetki = new YetkiIsKurali();
            FonksiyonSonuc<KullaniciDataSet> oSonucKullanici = oYetki.KullaniciGetirbyKullaniciID(KullaniciID);
            if (oSonucKullanici.HataVarMi)
                throw new Exception(oSonucKullanici.Hata + " " + oSonucKullanici.ExMesaji);

            rfvSifre.Enabled = false;
            KullaniciListesi = oSonucKullanici.Sonuc;
            KullaniciDataSet.KullaniciRow drKullanici = KullaniciListesi.Kullanici.FindByKullaniciID(KullaniciID);

            txtTckimlikNo.Text = drKullanici.TCKimlikNo;
            txtAdi.Text = drKullanici.Adi;
            txtSoyadi.Text = drKullanici.Soyadi;
            txtKullaniciAdi.Text = drKullanici.KullaniciAdi;
            txtAciklama.Text = drKullanici.Aciklama;
        }
        private void FormTemizle()
        {
            txtTckimlikNo.Text = "";
            txtAdi.Text = "";
            txtSoyadi.Text = "";
            txtKullaniciAdi.Text = "";
            txtSifre.Text = "";
            txtSifre2.Text = "";
            txtAciklama.Text = "";
        }

        #endregion

    }
}
